//命令行工具
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1000
struct Dabao{
    char filename[200];
    long filesize;
};
long Getfilesize(const char*filesize);

int main(int argc,const char * argv[]) {
    // insert code here...
    int num=argc-1;
    int i=0,k,j=0,m;
    char a[200];
    struct Dabao*p=(struct Dabao*)malloc(sizeof(struct Dabao)*num);
    //定义一个二维数组来存储所有文件的扩展名
    char**pa=(char**)malloc(sizeof(a[200])*num);
    //定义一个一维数组来储存每个文件的大小
    long*pb=(long*)malloc(4*num);
    //定义一个二维数组来储存分组后的扩展名
    char**pc=(char**)malloc(sizeof(a[200])*num);
    for(i=0;i<num;i++){
        /*获取每个文件的大小*/
        p[i].filesize=Getfilesize(argv[i+1]);
        /*获取每个文件的名字*/
        strcpy(p[i].filename,argv[i+1]);
        printf("i:%d 文件名 %s 文件大小 %ld\n",i,p[i].filename,p[i].filesize);
    }
    //循环得到每个文件的扩展名
    for(i=0;i<strlen(p[i].filename);i++){
        k=0;
        while(p[i].filename[k]!='.'){
            k++;
        }
        for(m=0;p[i].filename[k]!='\0';m++){
            pc[i][m]=p[i].filename[k];
            k++;
        }
            
            }
    //循环将扩展名进行分组
    pa[0]=p[0].filename;
    pb[0]=p[0].filesize;
    for(i=0;i<num;i++){
        j=0;
        for(m=i;pc[m][0]=='?';m++){}
        pa[j]=pc[m];
        pb[j]=p[m].filesize;
        for(k=1;k<num;k++){
        if(strcmp(pc[i],pc[k])){
        }
        else{
            j++;
            pa[j]=p[k].filename;
            pb[j]=p[k].filesize;
            //扩展名中不存在“？”，用“？”来说明该文件已经分过组了
            pc[k][0]='?';
        }
    }
        //输出一组相同的扩展名
        printf("%s\n",pa[0]);
        printf("%s,%ld\n",p[m].filename,p[m].filesize);
        for(k=2;k<=j;k++){
            if(pb[k]<1024){
                printf("%s,%ld\n",pa[k],pb[k]);
            }
            if(pb[k]>=1024&&pb[k]<10240){
                printf("%s,%.1fK\n",pa[k],(float)pb[k]/1024);
            }
            if(pb[k]>=1024&&pb[k]<10240){
                printf("%s,%ldK\n",pa[k],pb[k]/1024);
            }
            if(pb[k]>=1048576&&pb[k]<10485760){
                printf("%s,%.1fMB\n",pa[k],(float)pb[k]/1048576);
            }
            if(pb[k]>=10485760&&pb[k]<8.59e+9){
                printf("%s,%ldMB\n",pa[k],pb[k]/1048576);
            }
            if(pb[k]>=8.59e+9&&pb[k]<8.59e+10){
                printf("%s,%.1fGB\n",pa[k],(float)pb[k]/8.59e+9);
            }
            if(pb[k]>=8.59e+10&&pb[k]<8.8e+12){
                printf("%s,%ldGB\n",pa[k],(long)(pb[k]/8.59e+9));
            }
            else{
                printf("我不信你文件这么大\n");
            }
        }
    }
    return 0;
}
long Getfilesize(const char*filesize){
    FILE*fp=fopen(filesize,"r");
    long size;
    if(fp==NULL)
        return -1;
    fseek(fp,0,SEEK_END);
    size=ftell(fp);
    fseek(fp,0,SEEK_SET);
    fclose(fp);
    return size;
}
